solc-0.8.36-fakeopcode 0x000000000004444c5dc75cb358380d2e3de08a90 optimized-low-runs

19879 bytes

60806040526004361061017c575f3560e01c8062fdd58e1461018057806301ffc9a7146101c9578063095bcdb6146101f85780630b0d9c091461021757806311da60b414610238578063156e29f6146102405780631e2eaeaf1461025f578063234266d71461027e5780632d7713891461029d57806335fd631a146102bc5780633dd45adb146102e8578063426a8493146102fb57806348c894911461031a5780635275965114610346578063558a729714610365578063598af9e7146103845780635a6bcfda146103c05780636276cbbe146103f45780637e87ce7d1461042657806380f0b44c146104455780638161b874146104645780638da5cb5b1461048357806397e8cd4e146104ae5780639bf6645f146104d9578063a5841194146104f8578063b6363cf214610517578063dbd035ff14610550578063f02de3b21461056f578063f135baaa1461058e578063f2fde38b146105ad578063f3cd914c146105cc578063f5298aca146105eb578063fe99049a1461060a575b5f5ffd5b34801561018b575f5ffd5b506101b661019a3660046141e2565b600460209081525f928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b3480156101d4575f5ffd5b506101e86101e336600461420c565b610629565b60405190151581526020016101c0565b348015610203575f5ffd5b506101e8610212366004614233565b61065f565b348015610222575f5ffd5b50610236610231366004614265565b610707565b005b6101b6610751565b34801561024b575f5ffd5b5061023661025a366004614233565b61077c565b34801561026a575f5ffd5b506101b66102793660046142a3565b6107c8565b348015610289575f5ffd5b506101b6610298366004614422565b6107d2565b3480156102a8575f5ffd5b506102366102b7366004614486565b6108a8565b3480156102c7575f5ffd5b506102db6102d63660046144a1565b610923565b6040516101c091906144c1565b6101b66102f6366004614486565b610960565b348015610306575f5ffd5b506101e8610315366004614233565b61098b565b348015610325575f5ffd5b50610339610334366004614503565b6109ef565b6040516101c09190614541565b348015610351575f5ffd5b50610236610360366004614576565b610aab565b348015610370575f5ffd5b506101e861037f3660046145b7565b610b14565b34801561038f575f5ffd5b506101b661039e366004614265565b600560209081525f938452604080852082529284528284209052825290205481565b3480156103cb575f5ffd5b506103df6103da3660046145e1565b610b83565b604080519283526020830191909152016101c0565b3480156103ff575f5ffd5b5061041361040e366004614683565b610d0f565b60405160029190910b81526020016101c0565b348015610431575f5ffd5b50610236610440366004614576565b610edb565b348015610450575f5ffd5b5061023661045f3660046141e2565b610f82565b34801561046f575f5ffd5b506101b661047e366004614265565b610fe7565b34801561048e575f5ffd5b505f546104a1906001600160a01b031681565b6040516101c091906146b9565b3480156104b9575f5ffd5b506101b66104c8366004614486565b60016020525f908152604090205481565b3480156104e4575f5ffd5b506102db6104f33660046146cc565b6110c2565b348015610503575f5ffd5b50610236610512366004614486565b6110fb565b348015610522575f5ffd5b506101e861053136600461473b565b600360209081525f928352604080842090915290825290205460ff1681565b34801561055b575f5ffd5b506102db61056a3660046146cc565b611140565b34801561057a575f5ffd5b506002546104a1906001600160a01b031681565b348015610599575f5ffd5b506101b66105a83660046142a3565b611177565b3480156105b8575f5ffd5b506102366105c7366004614486565b611181565b3480156105d7575f5ffd5b506101b66105e6366004614767565b6111f4565b3480156105f6575f5ffd5b50610236610605366004614233565b61132f565b348015610615575f5ffd5b506101e8610624366004614805565b61137b565b5f6301ffc9a760e01b6001600160e01b0319831614806106595750630f632fb360e01b6001600160e01b03198316145b92915050565b335f90815260046020908152604080832085845290915281208054839190839061068a90849061485c565b90915550506001600160a01b0384165f908152600460209081526040808320868452909152812080548492906106c190849061486f565b909155505060405183906001600160a01b0386169033905f516020614d275f395f51905f52906106f49083908890614882565b60405180910390a45060015b9392505050565b61070f6114db565b610723576107236354e3ca0d60e01b6114ed565b61073883610730836114f5565b5f0333611515565b61074c6001600160a01b0384168383611568565b505050565b5f61075a6114db565b61076e5761076e6354e3ca0d60e01b6114ed565b61077733611610565b905090565b6107846114db565b610798576107986354e3ca0d60e01b6114ed565b816107a681610730846114f5565b6107c2846107bc6001600160a01b0384166116a5565b846116b1565b50505050565b5f81545f5260205ff35b5f6107db6114db565b6107ef576107ef6354e3ca0d60e01b6114ed565b6107f7611723565b60a086205f61080582611765565b905061081081611775565b608088015161082c906001600160a01b0316898989898961179f565b61083781888861182c565b92506108448884336118bf565b6040805188815260208101889052339184917f29ef05caaff9404b7cb6d1c0e9bbae9eaa7ab2541feba1a9c4248594c08156cb910160405180910390a3608088015161089d906001600160a01b031689898989896118e7565b505095945050505050565b5f546001600160a01b031633146108da5760405162461bcd60e51b81526004016108d19061489a565b60405180910390fd5b600280546001600160a01b0319166001600160a01b0383169081179091556040517fb4bd8ef53df690b9943d3318996006dbb82a25f54719d8c8035b516a2a5b8acc905f90a250565b6060604051808360051b6020835284602084015260408301925080830190505b855483526020830192506001860195508083106109435781810382f35b5f6109696114db565b61097d5761097d6354e3ca0d60e01b6114ed565b61065982611610565b919050565b335f8181526005602090815260408083206001600160a01b03881680855290835281842087855290925280832085905551919285927fb3fd5071835887567a0671151121894ddccc2842f1d10bedad13e0d17cace9a7906106f49087815260200190565b60606109f96114db565b15610a0e57610a0e6328486b6360e11b6114ed565b610a16611969565b6040516348eeb9a360e11b815233906391dd734690610a3b90869086906004016148e8565b5f604051808303815f875af1158015610a56573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610a7d91908101906148fb565b90505f516020614d875f395f51905f525c15610aa357610aa3635212cba160e01b6114ed565b61065961197c565b610abd826040015162ffffff1661198e565b1580610ad6575060808201516001600160a01b03163314155b15610aeb57610aeb6330d2164160e01b6114ed565b610af98162ffffff1661199b565b60a082205f81815260066020526040902061074c90836119c1565b335f8181526003602090815260408083206001600160a01b038716808552908352818420805460ff191687151590811790915591519182529293917fceb576d9f15e4e200fdb5096d64d5dfd667e16def20c1eefd14256d8e3faa267910160405180910390a350600192915050565b5f5f610b8d6114db565b610ba157610ba16354e3ca0d60e01b6114ed565b610ba9611723565b60a086205f610bb782611765565b9050610bc281611775565b6080880151610bdd906001600160a01b0316898989896119dc565b5f610c416040518060c001604052803360601b60601c81526020018a5f015160020b81526020018a6020015160020b8152602001610c1e8b60400151611af8565b600f0b81526060808d015160020b60208301528b01516040909101528390611b14565b94509050610c4f8185611e40565b885160208a01516040808c015160608d015191519499503396508795507ff208f4912782fd25c7f114ca3723a2d5dd6f3bcc3ac8db5af63baa85f711d5ec94610cb894939290600294850b81529290930b60208301526040820152606081019190915260800190565b60405180910390a360808701515f90610cdf906001600160a01b0316898987878b8b611e73565b90945090508015610cf957610cf988828a608001516118bf565b610d048885336118bf565b505094509492505050565b5f610d18611723565b6060830151617fff60029190910b1315610d43576060830151610d43906316e0049f60e31b90611fce565b600160020b836060015160020b1215610d6d576060830151610d6d90631d3d20b160e31b90611fce565b825160208401516001600160a01b03908116911610610d9f5782516020840151610d9f916306e6c98360e41b91611fdd565b60408301516080840151610dbe916001600160a01b0390911690612006565b610dd9576080830151610dd990630732d7b560e51b9061213e565b5f610dec846040015162ffffff16612153565b6080850151909150610e08906001600160a01b0316858561217c565b60a084205f818152600660205260409020610e249085846121f9565b9250846020015160601b60601c855f015160601b60601c827fdd466e674ea557f56295e2d0218a125ea4b4f0f6f3307b95f85e6110838d6438886040015189606001518a608001518a8a604051610eb195949392919062ffffff9095168552600293840b60208601526001600160a01b03928316604086015291166060840152900b608082015260a00190565b60405180910390a46080850151610ed3906001600160a01b0316868686612257565b505092915050565b6002546001600160a01b03163314610efd57610efd6348f5c3ed60e01b6114ed565b6103e9610fff821610623e900062fff00083161016610f2c57610f2c63a7abe2f760e01b62ffffff831661213e565b60a08220610f4382610f3d83611765565b906122d6565b60405162ffffff8316815281907fe9c42593e71f84403b84352cd168d693e2c9fcd1fdbcc3feb21d92b43e6696f99060200160405180910390a2505050565b610f8a6114db565b610f9e57610f9e6354e3ca0d60e01b6114ed565b5f610fb26001600160a01b038416336122fd565b90505f610fbe836114f5565b90508181600f0b14610fda57610fda63bda73abf60e01b6114ed565b6107c284825f0333611515565b6002545f906001600160a01b0316331461100b5761100b6348f5c3ed60e01b6114ed565b61101d6001600160a01b038416612312565b158015611042575061104261103061231f565b846001600160a01b0390811691161490565b15611057576110576318f3cb2960e31b6114ed565b8115611063578161107c565b6001600160a01b0383165f908152600160205260409020545b6001600160a01b0384165f908152600160205260408120805492935083929091906110a890849061485c565b9091555061070090506001600160a01b0384168583611568565b606060405180602082528360208301526040820191508360051b8201855b80355c8452602093840193018184106110e0575b5081810382f35b61110d6001600160a01b038216612312565b1561111d5761111a612331565b50565b5f6111306001600160a01b038316612343565b905061113c82826123cd565b5050565b606060405180602082528360208301526040820191508360051b8201855b803554845260209384019301818410156110f45761115e565b5f815c5f5260205ff35b5f546001600160a01b031633146111aa5760405162461bcd60e51b81526004016108d19061489a565b5f80546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b5f6111fd6114db565b611211576112116354e3ca0d60e01b6114ed565b611219611723565b83602001515f036112345761123463be8b850760e01b6114ed565b60a085205f61124282611765565b905061124d81611775565b60808701515f908190819061126e906001600160a01b03168b8b8b8b6123fa565b8093508195508294505050506112da84866040518060a001604052808681526020018e6060015160020b81526020018d5f0151151581526020018d6040015160601b60601c81526020018562ffffff168152508c5f01516112d3578d6020015161253a565b8d5161253a565b60808b01519096505f92506112fe91506001600160a01b03168a8a888b8b88612618565b909550905080156113185761131889828b608001516118bf565b6113238986336118bf565b50505050949350505050565b6113376114db565b61134b5761134b6354e3ca0d60e01b6114ed565b8161135f81611359846114f5565b33611515565b6107c2846113756001600160a01b0384166116a5565b8461274a565b5f336001600160a01b038616148015906113b857506001600160a01b0385165f90815260036020908152604080832033845290915290205460ff16155b15611428576001600160a01b0385165f90815260056020908152604080832033845282528083208684529091529020545f198114611426576113fa838261485c565b6001600160a01b0387165f90815260056020908152604080832033845282528083208884529091529020555b505b6001600160a01b0385165f9081526004602090815260408083208684529091528120805484929061145a90849061485c565b90915550506001600160a01b0384165f9081526004602090815260408083208684529091528120805484929061149190849061486f565b909155505060405183906001600160a01b0380871691908816905f516020614d275f395f51905f52906114c79033908890614882565b60405180910390a45060015b949350505050565b5f516020614d475f395f51905f525c90565b805f5260045ffd5b5f6001607f1b8210611511576115116393dafdf160e01b6114ed565b5090565b81600f0b5f0361152457505050565b5f8061153a6001600160a01b0386168486612808565b91509150805f036115525761154d612837565b611561565b815f036115615761156161285f565b5050505050565b5f61157b6001600160a01b038516612312565b156115a6575f5f5f5f85875af19050806115a1576115a1835f633d2cec6f60e21b612887565b6107c2565b60405163a9059cbb60e01b81526001600160a01b038416600482015282602482015260205f6044835f895af13d15601f3d1160015f511416171691505f81525f60208201525f604082015250806107c2576107c28463a9059cbb60e01b633c9fd93960e21b612887565b5f5f61161a61231f565b905061162e6001600160a01b038216612312565b1561163b5734915061168c565b341561165157611651635876424f60e11b6114ed565b5f516020614d675f395f51905f525c5f6116736001600160a01b038416612343565b905061167f828261485c565b9350611689612331565b50505b61169f81611699846114f5565b85611515565b50919050565b6001600160a01b031690565b6001600160a01b0383165f908152600460209081526040808320858452909152812080548392906116e390849061486f565b909155505060405182906001600160a01b038516905f905f516020614d275f395f51905f52906117169033908790614882565b60405180910390a4505050565b306001600160a01b037f000000000000000000000000000000000004444c5dc75cb358380d2e3de08a901614611763576117636306c4a1c760e11b6114ed565b565b5f90815260066020526040902090565b8054611780906116a5565b6001600160a01b03165f0361111a5761111a63486aa30760e01b6114ed565b85336001600160a01b03821614611823576117c46001600160a01b03881660206128ff565b15611823576118213387878787876040516024016117e7969594939291906149d0565b60408051601f198184030181529190526020810180516001600160e01b0316635b54587d60e11b1790526001600160a01b0389169061290e565b505b50505050505050565b60038301545f906001600160801b03168082036118535761185363a74f97ab60e01b6114ed565b61187161185f856114f5565b5f0361186a856114f5565b5f036129a8565b91508315611895576001850180546001600160801b038316600160801b8702040190555b82156118b7576002850180546001600160801b038316600160801b8602040190555b509392505050565b82516118d5906118cf8460801d90565b83611515565b61074c83602001516118cf84600f0b90565b85336001600160a01b038216146118235761190c6001600160a01b03881660106128ff565b156118235761182133878787878760405160240161192f969594939291906149d0565b60408051601f198184030181529190526020810180516001600160e01b031663e1b4af6960e01b1790526001600160a01b0389169061290e565b60015f516020614d475f395f51905f525d565b5f5f516020614d475f395f51905f525d565b62ffffff16628000001490565b620f424062ffffff8216111561111a5761111a631400211360e01b62ffffff831661213e565b6119ca82611775565b81546119d690826129bb565b90915550565b84336001600160a01b03821614611af0575f8460400151138015611a105750611a106001600160a01b0387166108006128ff565b15611a7157611a6b3386868686604051602401611a31959493929190614a46565b60408051601f198184030181529190526020810180516001600160e01b031663259982e560e01b1790526001600160a01b0388169061290e565b50611af0565b5f846040015113158015611a955750611a956001600160a01b0387166102006128ff565b15611af0576118233386868686604051602401611ab6959493929190614a46565b60408051601f198184030181529190526020810180516001600160e01b031663021d0ee760e41b1790526001600160a01b0388169061290e565b505050505050565b80600f81900b8114610986576109866393dafdf160e01b6114ed565b6060810151602082015160408301515f9283929091611b3382826129d6565b604080516080810182525f80825260208201819052918101829052606081019190915283600f0b5f14611c6b57611b6c8884865f612a36565b6001600160801b0316602083015215158152611b8b8883866001612a36565b6001600160801b03166060830152151560408201525f600f85900b12611c305760808701515f9060020b620d89e71981810783139082900503620d89e891909105036001016001600160801b030460208301519091506001600160801b0380831691161115611c0557611c0563b8e3c38560e01b85611fce565b60608201516001600160801b0380831691161115611c2e57611c2e63b8e3c38560e01b84611fce565b505b805115611c4c576080870151611c4c9060058a01908590612af7565b806040015115611c6b576080870151611c6b9060058a01908490612af7565b5f5f611c788a8686612b49565b8a5160a08c015160408051602681019290925260068083018a9052600383018b9052928252603a600c8301205f838301819052602080850182905293819052908152928f01909152812092945090925080611cd5838a8787612bfd565b91509150611cf3611ce5836114f5565b611cee836114f5565b6129a8565b995050505050505f84600f0b1215611d2a57805115611d1657611d168884612cb4565b806040015115611d2a57611d2a8883612cb4565b5082600f0b5f14611e365786545f80611d468360a01c60020b90565b611d4f846116a5565b915091508460020b8260020b1215611d9457611d8d611d87611d82611d7388612cd7565b611d7c88612cd7565b8a612f8f565b611af8565b5f6129a8565b9750611e32565b8360020b8260020b1215611e0d57611dcb611db5611d8283611d7c88612cd7565b611cee611d82611dc489612cd7565b858b612fc7565b60038b0154909850611de6906001600160801b031687612ff3565b60038b0180546001600160801b0319166001600160801b0392909216919091179055611e32565b611e2f5f611cee611d82611e2089612cd7565b611e2989612cd7565b8b612fc7565b97505b5050505b5050509250929050565b5f608082811d9084901d01600f83810b9085900b01611e6a611e6183611af8565b611cee83611af8565b95945050505050565b5f806001600160a01b0389163303611e8f57508490505f611fc2565b8591505f87604001511315611f3b57611eb36001600160a01b038a166104006128ff565b15611f3657611f2733898989898989604051602401611ed89796959493929190614a85565b60408051601f198184030181529190526020810180516001600160e01b03166327c18fbf60e21b179052611f166001600160a01b038c1660026128ff565b6001600160a01b038c16919061301a565b9050611f33828261305b565b91505b611fc2565b611f506001600160a01b038a166101006128ff565b15611fc257611fb333898989898989604051602401611f759796959493929190614a85565b60408051601f198184030181529190526020810180516001600160e01b0316633615df3f60e11b179052611f166001600160a01b038c1660016128ff565b9050611fbf828261305b565b91505b97509795505050505050565b815f528060020b60045260245ffd5b6040518381526001600160a01b03831660048201526001600160a01b0382166024820152604481fd5b5f61201b6001600160a01b03841660806128ff565b15801561203757506120376001600160a01b03841660086128ff565b1561204357505f610659565b6120576001600160a01b03841660406128ff565b15801561207357506120736001600160a01b03841660046128ff565b1561207f57505f610659565b6120946001600160a01b0384166104006128ff565b1580156120b057506120b06001600160a01b03841660026128ff565b156120bc57505f610659565b6120d16001600160a01b0384166101006128ff565b1580156120ed57506120ed6001600160a01b03841660016128ff565b156120f957505f610659565b6001600160a01b0383161561212857613fff831615158061212357506121238262ffffff1661198e565b610700565b6121368262ffffff1661198e565b159392505050565b815f526001600160a01b03811660045260245ffd5b5f6121628262ffffff1661198e565b1561216e57505f919050565b6115118262ffffff1661199b565b82336001600160a01b038216146107c2576121a26001600160a01b0385166120006128ff565b156107c2576115613384846040516024016121bf93929190614ad2565b60408051601f198184030181529190526020810180516001600160e01b0316636e4c1aa760e11b1790526001600160a01b0386169061290e565b5f612206845f01546116a5565b6001600160a01b03161561222457612224637983c05160e01b6114ed565b61222d8361307c565b905061224d82612247836122415f886132d9565b906132f3565b906129bb565b9093555090919050565b83336001600160a01b038216146115615761227d6001600160a01b0386166110006128ff565b1561156157611af03385858560405160240161229c9493929190614b07565b60408051601f198184030181529190526020810180516001600160e01b0316636fe7e6eb60e01b1790526001600160a01b0387169061290e565b6122df82611775565b815462ffffff60b81b191662ffffff60b81b60b883901b16176119d6565b5f5f612309838561330e565b5c949350505050565b6001600160a01b03161590565b5f516020614d075f395f51905f525c90565b5f5f516020614d075f395f51905f525d565b5f6123566001600160a01b038316612312565b15612362575047919050565b6040516370a0823160e01b81526001600160a01b038316906370a082319061238e9030906004016146b9565b602060405180830381865afa1580156123a9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106599190614b47565b6001600160a01b0382165f516020614d075f395f51905f525d805f516020614d675f395f51905f525d5050565b60208301515f806001600160a01b0388163303612419575f915061252f565b61242d6001600160a01b03891660806128ff565b1561252f575f61247f89338a8a8a8a604051602401612450959493929190614b82565b60408051601f198184030181529190526020810180516001600160e01b03166315d7892d60e21b17905261290e565b9050805160601461249a5761249a631e048e1d60e01b6114ed565b6124ac886040015162ffffff1661198e565b156124b957606081015191505b6124cd6001600160a01b038a1660086128ff565b1561252d57604081015192505f6124e48460801d90565b905080600f0b5f1461252b575f8512612501600f83900b87614bc1565b955080612510575f8612612514565b5f86135b1561252957612529637d05b8eb60e11b6114ed565b505b505b505b955095509592505050565b5f808080806125498988613329565b93509350935093505f831115612577576001600160a01b0386165f9081526001602052604090208054840190555b33887f40e9cecb9f5f1f1c5b9c97dec2917b7ee92e57ba5563708daca94dd84ad7112f6125a48760801d90565b6125ae88600f0b90565b85516040808801516020808a01518351600f97880b81529590960b908501526001600160a01b03909216908301526001600160801b0316606082015260029190910b608082015262ffffff861660a082015260c00160405180910390a35091979650505050505050565b5f806001600160a01b038916330361263457508490505f611fc2565b5f61263f8460801d90565b90505f61264c85600f0b90565b90506126626001600160a01b038c1660406128ff565b156126e4576126d7611d82338c8c8c8c8c60405160240161268896959493929190614be0565b60408051601f198184030181529190526020810180516001600160e01b031663b47b2fb160e01b1790526126c66001600160a01b038f1660046128ff565b6001600160a01b038f16919061301a565b6126e19082614c26565b90505b5f81600f0b5f1415806126fa575082600f0b5f14155b1561273857895160208b01515f139015151461271f5761271a82846129a8565b612729565b61272983836129a8565b9050612735898261305b565b98505b979b979a509698505050505050505050565b336001600160a01b038416811480159061278957506001600160a01b038085165f9081526003602090815260408083209385168352929052205460ff16155b156127fd576001600160a01b038085165f9081526005602090815260408083209385168352928152828220868352905220545f1981146127fb576127cd838261485c565b6001600160a01b038087165f9081526005602090815260408083209387168352928152828220888352905220555b505b6107c2848484613963565b5f5f5f612815858761330e565b805c93509050612829600f85900b84614bc1565b915081815d50935093915050565b5f516020614d875f395f51905f525c600181039050805f516020614d875f395f51905f525d50565b5f516020614d875f395f51905f525c600181019050805f516020614d875f395f51905f525d50565b6040516390bfb86560e01b8082526001600160a01b03851660048301526001600160e01b031984166024830152608060448301526020601f3d018190040260a0810160648401523d608484015290913d5f60a483013e60048260a4018201526001600160e01b031984168260c4018201528160e40181fd5b166001600160a01b0316151590565b60605f5f5f8451602086015f885af190508061293e5761293e8461293185614c53565b63a9e35b2f60e01b612887565b6040519150601f19603f3d011682016040523d82523d5f602084013e60208251108061298c575060208301516001600160e01b03191661297f836020015190565b6001600160e01b03191614155b156129a1576129a1631e048e1d60e01b6114ed565b5092915050565b6001600160801b031660809190911b1790565b60d01b62ffffff60d01b1662ffffff60d01b19919091161790565b8060020b8260020b126129f5576129f563c4433ed560e01b83836139c8565b620d89e719600283900b1215612a1657612a1663d5e2f7ab60e01b83611fce565b620d89e8600282900b131561113c5761113c63035aeeff60e31b82611fce565b600283900b5f908152600485016020526040812080548291906001600160801b03811690600160801b9004600f0b612a6e8288612ff3565b6001600160801b03808216159084168015919091141596509094505f03612ab857885460a01c60020b60020b8860020b13612ab8576001808a0154908401556002808a0154908401555b5f86612acd57612ac88883614c26565b612ad7565b612ad78883614c87565b90508060801b6001600160801b0386161784555050505094509492505050565b600291820b910b80820715612b245760405163d4d8f3e681528260208201528160408201526044601c8201fd5b80820591508160081d5f528260205260405f20600160ff84161b815418815550505050565b600282810b5f81815260048601602052604080822085850b83529082208754929485949293919260a09290921c900b90811215612b9f578160010154836001015403945081600201548360020154039350612bf2565b8560020b8160020b12612bcb578260010154826001015403945082600201548260020154039350612bf2565b81600101548360010154896001015403039450816002015483600201548960020154030393505b505050935093915050565b83545f9081906001600160801b0316600f86900b8203612c3c576001600160801b0381165f03612c3757612c37632bbfae4960e21b6114ed565b612c62565b612c468187612ff3565b87546001600160801b0319166001600160801b03919091161787555b6001870154612c819086036001600160801b038316600160801b6139e5565b9250612c9e876002015485038260801b60801c600160801b6139e5565b6001880195909555505060029094015591929050565b600290810b5f908152600490920160205260408220828155600181018390550155565b60020b5f60ff82901d80830118620d89e8811115612d0057612d006345c3193d60e11b84611fce565b7001fffcb933bd6fad37aa2d162d1a5940016001821602600160801b186002821615612d3c576ffff97272373d413259a46990580e213a0260801c5b6004821615612d5b576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615612d7a576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615612d99576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615612db8576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615612dd7576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615612df6576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615612e16576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615612e36576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615612e56576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615612e76576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615612e96576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615612eb6576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615612ed6576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615612ef6576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615612f17576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615612f37576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615612f56576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615612f73576b048a170391f7dc42444e8fa20260801c5b5f841315612f7f575f19045b63ffffffff0160201c9392505050565b5f5f82600f0b12612fb657612faf612faa8585856001613a81565b613b38565b5f036114d3565b6114d3612faa8585855f035f613a81565b5f5f82600f0b12612fe257612faf612faa8585856001613b51565b6114d3612faa8585855f035f613b51565b6001600160801b038216600f82900b01608081901c15610659576393dafdf15f526004601cfd5b5f5f613026858561290e565b905082613036575f915050610700565b805160401461304f5761304f631e048e1d60e01b6114ed565b60400151949350505050565b5f608082811d9084901d03600f83810b9085900b03611e6a611e6183611af8565b5f73fffd8963efd1fc6a506488495d951d51639616826001600160a01b036401000276a21984011611156130bb576130bb6318521d4960e21b8361213e565b600160201b600160c01b03602083901b16805f6130d782613b9d565b60ff169050608081106130f257607f810383901c91506130fc565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c6001603f1b161760c19b909b1c6001603e1b169a909a1760c29990991c6001603d1b169890981760c39790971c6001603c1b169690961760c49590951c6001603b1b169490941760c59390931c6001603a1b169290921760c69190911c600160391b161760c79190911c600160381b161760c89190911c600160371b161760c99190911c600160361b161760ca9190911c600160351b161760cb9190911c600160341b161760cc9190911c600160331b161760cd9190911c600160321b1617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b146132ca576001600160a01b0389166132af82612cd7565b6001600160a01b031611156132c457816132cc565b806132cc565b815b9998505050505050505050565b6001600160a01b03166001600160a01b0319919091161790565b60a01b62ffffff60a01b1662ffffff60a01b19919091161790565b6001600160a01b039182165f90815291166020526040902090565b604080516060810182525f8082526020820181905291810182905281908190855460408601515f8161336357610fff60c484901c1661336d565b610fff60b884901c165b885161ffff9190911691505f613382856116a5565b6001600160a01b0316865261339a8560a01c60020b90565b60020b602087015260038b01546001600160801b0316604087015260808a01515f9062400000166133d45760d086901c62ffffff166133e6565b6133e68b6080015162ffffff16613c26565b9050831561340c57620f4240610fff851662ffffff83168181029290920491010361340e565b805b975050620f42408762ffffff16106134395789515f121561343957613439634b10312360e11b6114ed565b89515f03613451575f5f98509850505050505061395a565b83156134ce57613460856116a5565b60608b01516001600160a01b0391821691161061349757613497613483866116a5565b60608c0151637c9c6e8f60e01b9190611fdd565b60608a01516401000276a36001600160a01b03909116116134c95760608a01516134c990639e4d7cc760e01b9061213e565b61353b565b6134d7856116a5565b60608b01516001600160a01b039182169116116134fa576134fa613483866116a5565b60608a015173fffd8963efd1fc6a506488495d951d5263988d266001600160a01b039091161061353b5760608a015161353b90639e4d7cc760e01b9061213e565b60408051610100810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101919091528461358a578b60020154613590565b8b600101545b60e08201525b8215806135b4575060608b015187516001600160a01b039081169116145b6138885786516001600160a01b03168152602080880151908c01516135de9160058f019188613c35565b1515604083015260020b60208201819052620d89e7191261360457620d89e71960208201525b620d89e860020b816020015160020b1261362257620d89e860208201525b61362f8160200151612cd7565b6001600160a01b0390811660608381018290528951908e015161366c939192911680821891811160018a161891909102188960400151868c613d22565b60c085015260a084015260808301526001600160a01b031687528a515f12156136c85761369c8160a00151613b38565b830392506136b78160c001518260800151612faa919061486f565b6136c19083614cb4565b91506136f9565b6136db8160c00151826080015101613b38565b830192506136ec8160a00151613b38565b6136f69083614bc1565b91505b8315613748575f848962ffffff161461373057620f4240858360c00151846080015101028161372a5761372a614cd3565b04613736565b8160c001515b60c08301805182900390529990990198505b60408701516001600160801b0316156137835760c081015160408801516001600160801b0316600160801b9091020460e08201805190910190525b606081015187516001600160a01b039182169116036138625780604001511561383d575f5f866137bc578d600101548360e001516137c7565b8260e001518e600201545b915091505f6138128f85602001518585600292830b5f90815260049094016020526040909320600181018054909203909155908101805490920390915554600160801b9004600f0b90565b9050871561381d575f035b61382b8a6040015182612ff3565b6001600160801b031660408b01525050505b8461384c578060200151613855565b60018160200151035b60020b6020880152613596565b805187516001600160a01b039081169116146138835786516138559061307c565b613596565b865160208801516138a5919061389f9089906132f3565b906132d9565b8c55604087015160038d01546001600160801b039081169116146138ea57604087015160038d0180546001600160801b0319166001600160801b039092169190911790555b846138fe5760e081015160028d0155613909565b60e081015160018d01555b8a515f13851515146139365761392f61392183611af8565b611cee858e5f015103611af8565b9950613953565b613950613947848d5f015103611af8565b611cee84611af8565b99505b5050505050505b92959194509250565b6001600160a01b0383165f9081526004602090815260408083208584529091528120805483929061399590849061485c565b909155505060405182905f906001600160a01b038616905f516020614d275f395f51905f52906117169033908790614882565b6040518381528260020b60048201528160020b6024820152604481fd5b5f838302815f1985870982811083820303915050808411613a04575f5ffd5b805f03613a1657508290049050610700565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b5f6001600160a01b038085169086161115613a9a579293925b6001600160a01b038516613ab45762bfc9215f526004601cfd5b600160601b600160e01b03606084901b166001600160a01b038686031683613b01578660601b60601c613aee83838960601b60601c6139e5565b81613afb57613afb614cd3565b04613b2d565b613b2d613b1883836001600160a01b038a16613e85565b6001600160a01b038916808204910615150190565b979650505050505050565b805f811215610986576109866393dafdf160e01b6114ed565b5f6001600160a01b038481169086160360ff81901d90810118600160601b6001600160801b038516613b848184846139e5565b9350845f83858409111684019350505050949350505050565b5f5f8211613ba9575f5ffd5b507b01c1818141808140018080c0814100004181408140c0c100414140c160221b601f6f8421084210842108cc6318c6db6d54be6001600160801b03841160071b84811c6001600160401b031060061b1784811c63ffffffff1060051b1784811c61ffff1060041b1784811c60ff1060031b1793841c1c161a1790565b62bfffff81166109868161199b565b5f80600284810b9086900b8181078313919005038315613cb457600281900b60081d600181900b5f908152602089905260409020545f1960ff808516908190039190911c918216801515955090919085613c9657888360ff16860302613ca9565b88613ca082613b9d565b840360ff168603025b965050505050613d18565b6001908101600281900b60081d80830b5f90815260208a905260409020545f1960ff841694851b011990811680151595509293919285613cfe57888360ff0360ff16860102613d11565b8883613d0983613eb5565b0360ff168601025b9650505050505b5094509492505050565b5f80808062ffffff85166001600160a01b03808a16908b1610158288128015613df8575f613d5b8a5f0385620f424003620f42406139e5565b905082613d7457613d6f8d8d8d6001613b51565b613d81565b613d818c8e8d6001613a81565b9650868110613db5578b9750620f42408414613dac57613da7878586620f424003613e85565b613dae565b865b9450613dce565b809650613dc48d8c8386613f4f565b9750868a5f030394505b82613de457613ddf8d898d5f613a81565b613df0565b613df0888e8d5f613b51565b955050613e76565b81613e0e57613e098c8c8c5f613a81565b613e1a565b613e1a8b8d8c5f613b51565b9450848910613e2b578a9650613e3d565b889450613e3a8c8b8785613f9d565b96505b81613e5457613e4f8c888c6001613b51565b613e61565b613e61878d8c6001613a81565b9550613e73868485620f424003613e85565b93505b50505095509550955095915050565b5f613e918484846139e5565b90508180613ea157613ea1614cd3565b838509156107005760010180610700575f5ffd5b5f5f8211613ec1575f5ffd5b507e1f0d1e100c1d070f090b19131c1706010e11080a1a141802121b15031604055f8290039091166101e07f804040554300526644320000502061067405302602000010750620017611707760fc7fb6db6db6ddddddddd34d34d349249249210842108c6318c639ce739cffffffff840260f81c161b60f71c1690811c63d76453e004601f169190911a1790565b5f6001600160801b038416156001600160a01b038616151715613f7957634f2461b85f526004601cfd5b81613f9057613f8b8585856001613fe0565b611e6a565b611e6a85858560016140cb565b5f6001600160801b038416156001600160a01b038616151715613fc757634f2461b85f526004601cfd5b81613fd857613f8b8585855f6140cb565b611e6a8585855f5b5f8115614050575f6001600160a01b038411156140145761400f84600160601b6001600160801b0388166139e5565b61402b565b61402b6001600160801b038616606086901b614ce7565b9050614048614043826001600160a01b03891661486f565b6141ad565b9150506114d3565b5f6001600160a01b0384111561407d5761407884600160601b6001600160801b038816613e85565b61409a565b61409a606085901b6001600160801b038716808204910615150190565b9050806001600160a01b038716116140b957634323a5555f526004601cfd5b6001600160a01b0386160390506114d3565b5f825f036140da5750836114d3565b600160601b600160e01b03606085901b16821561416c576001600160a01b0386168481029085828161410e5761410e614cd3565b040361413e5781810182811061413c57614132836001600160a01b038a1683613e85565b93505050506114d3565b505b5061404881856141576001600160a01b038a1683614ce7565b614161919061486f565b808204910615150190565b6001600160a01b0386168481029085820414818311166141935763f5c787f15f526004601cfd5b808203614132614043846001600160a01b038b1684613e85565b806001600160a01b0381168114610986576109866393dafdf160e01b6114ed565b6001600160a01b038116811461111a575f5ffd5b5f5f604083850312156141f3575f5ffd5b82356141fe816141ce565b946020939093013593505050565b5f6020828403121561421c575f5ffd5b81356001600160e01b031981168114610700575f5ffd5b5f5f5f60608486031215614245575f5ffd5b8335614250816141ce565b95602085013595506040909401359392505050565b5f5f5f60608486031215614277575f5ffd5b8335614282816141ce565b92506020840135614292816141ce565b929592945050506040919091013590565b5f602082840312156142b3575f5ffd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156142f0576142f06142ba565b60405290565b604051601f8201601f191681016001600160401b038111828210171561431e5761431e6142ba565b604052919050565b803562ffffff81168114610986575f5ffd5b8035600281900b8114610986575f5ffd5b5f60a08284031215614359575f5ffd5b60405160a081016001600160401b038111828210171561437b5761437b6142ba565b604052905080823561438c816141ce565b8152602083013561439c816141ce565b60208201526143ad60408401614326565b60408201526143be60608401614338565b606082015260808301356143d1816141ce565b6080919091015292915050565b5f5f83601f8401126143ee575f5ffd5b5081356001600160401b03811115614404575f5ffd5b60208301915083602082850101111561441b575f5ffd5b9250929050565b5f5f5f5f5f6101008688031215614437575f5ffd5b6144418787614349565b945060a0860135935060c0860135925060e08601356001600160401b03811115614469575f5ffd5b614475888289016143de565b969995985093965092949392505050565b5f60208284031215614496575f5ffd5b8135610700816141ce565b5f5f604083850312156144b2575f5ffd5b50508035926020909101359150565b602080825282518282018190525f918401906040840190835b818110156144f85783518352602093840193909201916001016144da565b509095945050505050565b5f5f60208385031215614514575f5ffd5b82356001600160401b03811115614529575f5ffd5b614535858286016143de565b90969095509350505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f5f60c08385031215614587575f5ffd5b6145918484614349565b915061459f60a08401614326565b90509250929050565b80358015158114610986575f5ffd5b5f5f604083850312156145c8575f5ffd5b82356145d3816141ce565b915061459f602084016145a8565b5f5f5f5f8486036101408112156145f6575f5ffd5b6146008787614349565b94506080609f1982011215614613575f5ffd5b5061461c6142ce565b61462860a08701614338565b815261463660c08701614338565b602082015260e08601356040820152610100860135606082015292506101208501356001600160401b0381111561466b575f5ffd5b614677878288016143de565b95989497509550505050565b5f5f60c08385031215614694575f5ffd5b61469e8484614349565b915060a08301356146ae816141ce565b809150509250929050565b6001600160a01b03909116815260200190565b5f5f602083850312156146dd575f5ffd5b82356001600160401b038111156146f2575f5ffd5b8301601f81018513614702575f5ffd5b80356001600160401b03811115614717575f5ffd5b8560208260051b840101111561472b575f5ffd5b6020919091019590945092505050565b5f5f6040838503121561474c575f5ffd5b8235614757816141ce565b915060208301356146ae816141ce565b5f5f5f5f84860361012081121561477c575f5ffd5b6147868787614349565b94506060609f1982011215614799575f5ffd5b50604051606081016001600160401b03811182821017156147bc576147bc6142ba565b6040526147cb60a087016145a8565b815260c0860135602082015260e08601356147e5816141ce565b604082015292506101008501356001600160401b0381111561466b575f5ffd5b5f5f5f5f60808587031215614818575f5ffd5b8435614823816141ce565b93506020850135614833816141ce565b93969395505050506040820135916060013590565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561065957610659614848565b8082018082111561065957610659614848565b6001600160a01b039092168252602082015260400190565b6020808252600c908201526b15539055551213d49256915160a21b604082015260600190565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f6114d36020830184866148c0565b5f6020828403121561490b575f5ffd5b81516001600160401b03811115614920575f5ffd5b8201601f81018413614930575f5ffd5b80516001600160401b03811115614949576149496142ba565b61495c601f8201601f19166020016142f6565b818152856020838501011115614970575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b80516001600160a01b03908116835260208083015182169084015260408083015162ffffff169084015260608083015160020b9084015260809182015116910152565b6001600160a01b03871681526149e9602082018761498d565b8460c08201528360e08201526101206101008201525f614a0e610120830184866148c0565b98975050505050505050565b805160020b8252602081015160020b602083015260408101516040830152606081015160608301525050565b6001600160a01b0386168152614a5f602082018661498d565b614a6c60c0820185614a1a565b6101606101408201525f613b2d610160830184866148c0565b6001600160a01b0388168152614a9e602082018861498d565b614aab60c0820187614a1a565b84610140820152836101608201526101a06101808201525f6132cc6101a0830184866148c0565b6001600160a01b038416815260e08101614aef602083018561498d565b6001600160a01b0390921660c0919091015292915050565b6001600160a01b03851681526101008101614b25602083018661498d565b6001600160a01b0390931660c082015260029190910b60e09091015292915050565b5f60208284031215614b57575f5ffd5b5051919050565b805115158252602080820151908301526040908101516001600160a01b0316910152565b6001600160a01b0386168152614b9b602082018661498d565b614ba860c0820185614b5e565b6101406101208201525f613b2d610140830184866148c0565b8082018281125f831280158216821582161715610ed357610ed3614848565b6001600160a01b0387168152614bf9602082018761498d565b614c0660c0820186614b5e565b836101208201526101606101408201525f614a0e610160830184866148c0565b600f81810b9083900b0160016001607f1b03811360016001607f1b03198212171561065957610659614848565b805160208201516001600160e01b03191690600481101561169f576001600160e01b031960049190910360031b1b16919050565b600f82810b9082900b0360016001607f1b0319811260016001607f1b038213171561065957610659614848565b8181035f8312801583831316838312821617156129a1576129a1614848565b634e487b7160e01b5f52601260045260245ffd5b5f82614d0157634e487b7160e01b5f52601260045260245ffd5b50049056fe27e098c505d44ec3574004bca052aabf76bd35004c182099d8c575fb238593b91b3d7edb2e9c0b0e7c525b20aaaef0f5940d2ed71663c7d39266ecafac728859c090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab231e0745a7db1623981f0b2a5d4232364c00787266eb75ad546f190e6cebe9bd957d4b3164c6e45b97e7d87b7125a44c5828d005af88f9d751cfd78729c5d99a0b